/**
 * H5+cache 本地缓存操作
 */
import sha1 from './sha1.js';
export default {
	debug: false,
	/**
	 * 获取数据
	 * @param {string} key 
	 * @param {boole} force 不验证    
	 */
	get(key = '', force = false) {
		//获取
		if (!key) {
			if (this.debug) {
				console.warn('缓存操作key不能空！');
			}
			return null;
		}
		const str = window.localStorage.getItem(key);
		if (!str) {
			return null;
		}
		//解析
		try {
			const obj = JSON.parse(str)
			if (force) {
				return obj.val
			}
			let time = Math.round((Date.now() / 1000));
			//有效期
			if (time > obj.exp && obj.exp != 0) {
				if (this.debug) {
					console.warn(key + '：缓存已过期');
				}
				return null;
			}
			//值验证
			let md5_str = sha1(key + JSON.stringify(obj.val))
			if (obj.sha1 != md5_str) {
				if (this.debug) {
					console.warn(key + '：缓存无效，被篡改');
				}
				return null;
			}
			return obj.val;
		} catch (error) {
			return null;
		}
		
	},
	/**
	 * 设置值
	 * @param {string} key
	 * @param {Object} val 保存的值
	 * @param {int} 过期时间/秒      
	 */
	set(key = '', val = {}, exp = 604800) {
		//缓存值
		if (!key) {
			if (this.debug) {
				console.warn('缓存操作key不能空！');
			}
			return
		}

		if (val === null) {
			//删除
			window.localStorage.removeItem(key);
			return
		}

		let time = Math.round((Date.now() / 1000));

		let md5_str = sha1(key + JSON.stringify(val))
		if(exp!=0){
			exp += time
		}
		
		let obj = {
			val,
			exp,
			sha1: md5_str
		}

		window.localStorage.setItem(key, JSON.stringify(obj));
	},
	clearAll(){
		window.localStorage.clearAll()
	}
}
